package com.qf.utils;

import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ThreadPoolUtils {

    private static ThreadPoolExecutor tp;

    static {
        /*
            对tp进行初始化

            线程池7大参数:
              int corePoolSize,  核心线程数   3
              int maximumPoolSize,  最大线程数  5
              long keepAliveTime,  存活时间
              TimeUnit unit,   存活时间的单位
              BlockingQueue<Runnable> workQueue,  任务的缓存队列  10
              ThreadFactory threadFactory,  线程工厂
              RejectedExecutionHandler handler  拒绝策略
                AbortPolicy: 报异常拒绝 (如果任务的功能非常重要，选这个拒绝策略，可以通过异常立马感知到)
                CallerRunsPolicy: 任务是在哪个线程中提交的，就交给哪个线程执行
                DiscardOldestPolicy: 将任务的缓存队列最老的那个干掉，自己入队等待(不太重要的任务，选择这个)
                DiscardPolicy: 悄悄的丢掉任务

            线程池的工作流：

         */

        tp = new ThreadPoolExecutor(8,
                8,
                0,
                TimeUnit.SECONDS,
                new LinkedBlockingQueue<>(),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.DiscardPolicy()
                );

    }

    public static ThreadPoolExecutor tp(){
        return tp;
    }
}
